package thinkingJava.chapter09;
interface Game {
	boolean move();
}
interface GameFactory {
	Game getGame();
}
class Chess implements Game {
	private int moves = 0;
	private static final int MOVES = 4;
	public boolean move() {
		System.out.println("chess moves == " + moves);
		return ++moves != MOVES;
	}
}
class ChessFactory implements GameFactory {
	public Game getGame() {
		return new Chess();
	}
}
class Checkers implements Game {
	private int moves = 0;
	private static final int MOVES = 3;
	public boolean move() {
		System.out.println("Checkers moves == " + moves);
		return ++moves != MOVES;
	}
}
class CheckersFactory implements GameFactory {
	public Game getGame() {
		return new Checkers();
	}
}
public class Games {
	public static void play(GameFactory fact) {
		Game g = fact.getGame();
		while(g.move()) {
			;
		}
	}
	public static void main(String[] args) {
		play(new CheckersFactory());
		play(new ChessFactory());
	}
}
